rte_gpudev.h(3) | DPDK | rte_gpudev.h(3) |
NAME¶
rte_gpudev.h
SYNOPSIS¶
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#include <rte_mbuf.h>
#include <rte_bitops.h>
#include <rte_compat.h>
Data Structures¶
struct rte_gpu_info
struct rte_gpu_comm_flag
struct rte_gpu_comm_pkt
struct rte_gpu_comm_list
Macros¶
#define RTE_GPU_DEFAULT_MAX 32
#define RTE_GPU_ID_NONE -1
#define RTE_GPU_ID_ANY INT16_MIN
#define RTE_GPU_CALLBACK_ANY_DATA ((void *)-1)
#define RTE_GPU_VOLATILE(x) (*(volatile typeof(x) *)&(x))
#define RTE_GPU_COMM_LIST_PKTS_MAX 1024
#define RTE_GPU_FOREACH(dev_id) RTE_GPU_FOREACH_CHILD(dev_id,
RTE_GPU_ID_ANY)
#define RTE_GPU_FOREACH_PARENT(dev_id)
RTE_GPU_FOREACH_CHILD(dev_id, RTE_GPU_ID_NONE)
#define RTE_GPU_FOREACH_CHILD(dev_id, parent)
Typedefs¶
typedef void() rte_gpu_callback_t(int16_t dev_id,
enum rte_gpu_event event, void *user_data)
Enumerations¶
enum rte_gpu_event { RTE_GPU_EVENT_NEW,
RTE_GPU_EVENT_DEL }
enum rte_gpu_comm_flag_type { RTE_GPU_COMM_FLAG_CPU = 0 }
enum rte_gpu_comm_list_status { RTE_GPU_COMM_LIST_FREE = 0,
RTE_GPU_COMM_LIST_READY, RTE_GPU_COMM_LIST_DONE,
RTE_GPU_COMM_LIST_ERROR }
Functions¶
__rte_experimental int rte_gpu_init (size_t dev_max)
__rte_experimental uint16_t rte_gpu_count_avail (void)
__rte_experimental bool rte_gpu_is_valid (int16_t dev_id)
__rte_experimental int16_t rte_gpu_add_child (const char *name, int16_t
parent, uint64_t child_context)
__rte_experimental int16_t rte_gpu_find_next (int16_t dev_id, int16_t
parent)
__rte_experimental int rte_gpu_close (int16_t dev_id)
__rte_experimental int rte_gpu_callback_register (int16_t dev_id, enum
rte_gpu_event event, rte_gpu_callback_t *function, void
*user_data)
__rte_experimental int rte_gpu_callback_unregister (int16_t dev_id,
enum rte_gpu_event event, rte_gpu_callback_t *function, void
*user_data)
__rte_experimental int rte_gpu_info_get (int16_t dev_id, struct
rte_gpu_info *info)
__rte_experimental void * rte_gpu_mem_alloc (int16_t dev_id, size_t
size, unsigned int align) __rte_alloc_size(2)
__rte_experimental int rte_gpu_mem_free (int16_t dev_id, void *ptr)
__rte_experimental int rte_gpu_mem_register (int16_t dev_id, size_t
size, void *ptr)
__rte_experimental int rte_gpu_mem_unregister (int16_t dev_id, void
*ptr)
__rte_experimental void * rte_gpu_mem_cpu_map (int16_t dev_id, size_t
size, void *ptr)
__rte_experimental int rte_gpu_mem_cpu_unmap (int16_t dev_id, void
*ptr)
__rte_experimental int rte_gpu_wmb (int16_t dev_id)
__rte_experimental int rte_gpu_comm_create_flag (uint16_t dev_id,
struct rte_gpu_comm_flag *devflag, enum rte_gpu_comm_flag_type
mtype)
__rte_experimental int rte_gpu_comm_destroy_flag (struct
rte_gpu_comm_flag *devflag)
__rte_experimental int rte_gpu_comm_set_flag (struct
rte_gpu_comm_flag *devflag, uint32_t val)
__rte_experimental int rte_gpu_comm_get_flag_value (struct
rte_gpu_comm_flag *devflag, uint32_t *val)
__rte_experimental struct rte_gpu_comm_list *
rte_gpu_comm_create_list (uint16_t dev_id, uint32_t num_comm_items)
__rte_experimental int rte_gpu_comm_destroy_list (struct
rte_gpu_comm_list *comm_list, uint32_t num_comm_items)
__rte_experimental int rte_gpu_comm_populate_list_pkts (struct
rte_gpu_comm_list *comm_list_item, struct rte_mbuf **mbufs,
uint32_t num_mbufs)
__rte_experimental int rte_gpu_comm_set_status (struct
rte_gpu_comm_list *comm_list_item, enum
rte_gpu_comm_list_status status)
__rte_experimental int rte_gpu_comm_get_status (struct
rte_gpu_comm_list *comm_list_item, enum
rte_gpu_comm_list_status *status)
__rte_experimental int rte_gpu_comm_cleanup_list (struct
rte_gpu_comm_list *comm_list_item)
Detailed Description¶
Generic library to interact with GPU computing device.
The API is not thread-safe. Device management must be done by a single thread.
Warning
Definition in file rte_gpudev.h.
Macro Definition Documentation¶
#define RTE_GPU_DEFAULT_MAX 32¶
Maximum number of devices if rte_gpu_init() is not called.
Definition at line 32 of file rte_gpudev.h.
#define RTE_GPU_ID_NONE -1¶
Empty device ID.
Definition at line 35 of file rte_gpudev.h.
#define RTE_GPU_ID_ANY INT16_MIN¶
Catch-all device ID.
Definition at line 37 of file rte_gpudev.h.
#define RTE_GPU_CALLBACK_ANY_DATA ((void *)-1)¶
Catch-all callback data.
Definition at line 40 of file rte_gpudev.h.
#define RTE_GPU_VOLATILE(x) (*(volatile typeof(x) *)&(x))¶
Access variable as volatile.
Definition at line 43 of file rte_gpudev.h.
#define RTE_GPU_COMM_LIST_PKTS_MAX 1024¶
Max number of packets per communication list.
Definition at line 46 of file rte_gpudev.h.
#define RTE_GPU_FOREACH(dev_id) RTE_GPU_FOREACH_CHILD(dev_id, RTE_GPU_ID_ANY)¶
Warning
Macro to iterate over all valid GPU devices.
Parameters
Definition at line 238 of file rte_gpudev.h.
#define RTE_GPU_FOREACH_PARENT(dev_id) RTE_GPU_FOREACH_CHILD(dev_id, RTE_GPU_ID_NONE)¶
Warning
Macro to iterate over all valid computing devices having no parent.
Parameters
Definition at line 250 of file rte_gpudev.h.
#define RTE_GPU_FOREACH_CHILD(dev_id, parent)¶
Value:
for (dev_id = rte_gpu_find_next(0, parent); dev_id >= 0; dev_id = rte_gpu_find_next(dev_id + 1, parent))
Warning
Macro to iterate over all valid children of a computing device parent.
Parameters
parent The device ID of the parent.
Definition at line 264 of file rte_gpudev.h.
Typedef Documentation¶
typedef void() rte_gpu_callback_t(int16_t dev_id, enum rte_gpu_event event, void *user_data)¶
Prototype of event callback function.
Definition at line 77 of file rte_gpudev.h.
Enumeration Type Documentation¶
enum rte_gpu_event¶
Flags passed in notification callback.
Enumerator
- RTE_GPU_EVENT_NEW
- Device is just initialized.
- RTE_GPU_EVENT_DEL
- Device is going to be released.
Definition at line 69 of file rte_gpudev.h.
enum rte_gpu_comm_flag_type¶
Memory where communication flag is allocated.
Enumerator
- RTE_GPU_COMM_FLAG_CPU
- Allocate flag on CPU memory visible from device.
Definition at line 81 of file rte_gpudev.h.
enum rte_gpu_comm_list_status¶
Possible status for the list of packets shared among CPU and device.
Enumerator
- RTE_GPU_COMM_LIST_FREE
- Packet list can be filled with new mbufs, no one is using it.
- RTE_GPU_COMM_LIST_READY
- Packet list has been filled with new mbufs and it's ready to be used .
- RTE_GPU_COMM_LIST_DONE
- Packet list has been processed, it's ready to be freed.
- RTE_GPU_COMM_LIST_ERROR
- Some error occurred during packet list processing.
Definition at line 105 of file rte_gpudev.h.
Function Documentation¶
__rte_experimental int rte_gpu_init (size_t dev_max)¶
Warning
Initialize the device array before probing devices. If not called, the maximum of probed devices is RTE_GPU_DEFAULT_MAX.
Parameters
Returns
- ENOMEM if out of memory
- EINVAL if 0 size
- EBUSY if already initialized
__rte_experimental uint16_t rte_gpu_count_avail (void)¶
Warning
Return the number of GPU detected and associated to DPDK.
Returns
__rte_experimental bool rte_gpu_is_valid (int16_t dev_id)¶
Warning
Check if the device is valid and initialized in DPDK.
Parameters
Returns
- True if dev_id is a valid and initialized computing device.
- False otherwise.
__rte_experimental int16_t rte_gpu_add_child (const char * name, int16_t parent, uint64_t child_context)¶
Warning
Create a virtual device representing a context in the parent device.
Parameters
parent Device ID of the parent.
child_context Opaque context handler.
Returns
- EINVAL if empty name
- ENAMETOOLONG if long name
- EEXIST if existing device name
- ENODEV if invalid parent
- EPERM if secondary process
- ENOENT if too many devices
- ENOMEM if out of space
__rte_experimental int16_t rte_gpu_find_next (int16_t dev_id, int16_t parent)¶
Warning
Get the ID of the next valid GPU initialized in DPDK.
Parameters
parent The device ID of the parent. RTE_GPU_ID_NONE means no parent. RTE_GPU_ID_ANY means no or any parent.
Returns
__rte_experimental int rte_gpu_close (int16_t dev_id)¶
Warning
Close device or child context. All resources are released.
Parameters
Returns
- ENODEV if invalid dev_id
- EPERM if driver error
__rte_experimental int rte_gpu_callback_register (int16_t dev_id, enum rte_gpu_event event, rte_gpu_callback_t * function, void * user_data)¶
Warning
Register a function as event callback. A function may be registered multiple times for different events.
Parameters
event Device event to be registered for.
function Callback function to be called on event.
user_data Optional parameter passed in the callback.
Returns
- ENODEV if invalid dev_id
- EINVAL if NULL function
- ENOMEM if out of memory
__rte_experimental int rte_gpu_callback_unregister (int16_t dev_id, enum rte_gpu_event event, rte_gpu_callback_t * function, void * user_data)¶
Warning
Unregister for an event.
Parameters
event Registered event.
function Registered function.
user_data Optional parameter as registered. RTE_GPU_CALLBACK_ANY_DATA is a catch-all.
Returns
- ENODEV if invalid dev_id
- EINVAL if NULL function
__rte_experimental int rte_gpu_info_get (int16_t dev_id, struct rte_gpu_info * info)¶
Warning
Return device specific info.
Parameters
info Memory structure to fill with the info.
Returns
- ENODEV if invalid dev_id
- EINVAL if NULL info
- EPERM if driver error
__rte_experimental void* rte_gpu_mem_alloc (int16_t dev_id, size_t size, unsigned int align)¶
Warning
Allocate a chunk of memory in the device.
Parameters
size Number of bytes to allocate. Requesting 0 will do nothing.
align If 0, the return is a pointer that is suitably aligned for any kind of variable (in the same manner as malloc()). Otherwise, the return is a pointer that is a multiple of align. In this case, it must obviously be a power of two.
Returns
- ENODEV if invalid dev_id
- EINVAL if align is not a power of two
- ENOTSUP if operation not supported by the driver
- E2BIG if size is higher than limit
- ENOMEM if out of space
- EPERM if driver error
__rte_experimental int rte_gpu_mem_free (int16_t dev_id, void * ptr)¶
Warning
Deallocate a chunk of memory allocated with rte_gpu_mem_alloc().
Parameters
ptr Pointer to the memory area to be deallocated. NULL is a no-op accepted value.
Returns
- ENODEV if invalid dev_id
- ENOTSUP if operation not supported by the driver
- EPERM if driver error
__rte_experimental int rte_gpu_mem_register (int16_t dev_id, size_t size, void * ptr)¶
Warning
Register a chunk of memory on the CPU usable by the device.
Parameters
size Number of bytes to allocate. Requesting 0 will do nothing.
ptr Pointer to the memory area to be registered. NULL is a no-op accepted value.
Returns
- ENODEV if invalid dev_id
- EINVAL if reserved flags
- ENOTSUP if operation not supported by the driver
- E2BIG if size is higher than limit
- ENOMEM if out of space
- EPERM if driver error
__rte_experimental int rte_gpu_mem_unregister (int16_t dev_id, void * ptr)¶
Warning
Deregister a chunk of memory previously registered with rte_gpu_mem_register()
Parameters
ptr Pointer to the memory area to be unregistered. NULL is a no-op accepted value.
Returns
- ENODEV if invalid dev_id
- ENOTSUP if operation not supported by the driver
- EPERM if driver error
__rte_experimental void* rte_gpu_mem_cpu_map (int16_t dev_id, size_t size, void * ptr)¶
Warning
Map a chunk of GPU memory to make it accessible from the CPU using the memory pointer returned by the function. GPU memory has to be allocated via rte_gpu_mem_alloc().
Parameters
size Number of bytes to map. Requesting 0 will do nothing.
ptr Pointer to the GPU memory area to be mapped. NULL is a no-op accepted value.
Returns
- ENODEV if invalid dev_id
- ENOTSUP if operation not supported by the driver
- E2BIG if size is higher than limit
- ENOMEM if out of space
- EPERM if driver error
__rte_experimental int rte_gpu_mem_cpu_unmap (int16_t dev_id, void * ptr)¶
Warning
Unmap a chunk of GPU memory previously mapped with rte_gpu_mem_cpu_map()
Parameters
ptr Pointer to the GPU memory area to be unmapped. NULL is a no-op accepted value.
Returns
- ENODEV if invalid dev_id
- ENOTSUP if operation not supported by the driver
- EPERM if driver error
__rte_experimental int rte_gpu_wmb (int16_t dev_id)¶
Warning
Enforce a GPU write memory barrier.
Parameters
Returns
- ENODEV if invalid dev_id
- ENOTSUP if operation not supported by the driver
- EPERM if driver error
__rte_experimental int rte_gpu_comm_create_flag (uint16_t dev_id, struct rte_gpu_comm_flag * devflag, enum rte_gpu_comm_flag_type mtype)¶
Warning
Create a communication flag that can be shared between CPU threads and device workload to exchange some status info (e.g. work is done, processing can start, etc..).
Parameters
devflag Pointer to the memory area of the devflag structure.
mtype Type of memory to allocate the communication flag.
Returns
- ENODEV if invalid dev_id
- EINVAL if invalid inputs
- ENOTSUP if operation not supported by the driver
- ENOMEM if out of space
- EPERM if driver error
__rte_experimental int rte_gpu_comm_destroy_flag (struct rte_gpu_comm_flag * devflag)¶
Warning
Deallocate a communication flag.
Parameters
Returns
- ENODEV if invalid dev_id
- EINVAL if NULL devflag
- ENOTSUP if operation not supported by the driver
- EPERM if driver error
__rte_experimental int rte_gpu_comm_set_flag (struct rte_gpu_comm_flag * devflag, uint32_t val)¶
Warning
Set the value of a communication flag as the input value. Flag memory area is treated as volatile. The flag must have been allocated with RTE_GPU_COMM_FLAG_CPU.
Parameters
val Value to set in the flag.
Returns
- •
- EINVAL if invalid input params
__rte_experimental int rte_gpu_comm_get_flag_value (struct rte_gpu_comm_flag * devflag, uint32_t * val)¶
Warning
Get the value of the communication flag. Flag memory area is treated as volatile. The flag must have been allocated with RTE_GPU_COMM_FLAG_CPU.
Parameters
val Flag output value.
Returns
- •
- EINVAL if invalid input params
__rte_experimental struct rte_gpu_comm_list* rte_gpu_comm_create_list (uint16_t dev_id, uint32_t num_comm_items)¶
Warning
Create a communication list that can be used to share packets between CPU and device. Each element of the list contains:
- a packet list of RTE_GPU_COMM_LIST_PKTS_MAX elements
- number of packets in the list
- a status flag to communicate if the packet list is FREE, READY to be processed, DONE with processing.
The list is allocated in CPU-visible memory. At creation time, every list is in FREE state.
Parameters
num_comm_items Number of items in the communication list.
Returns
- •
- EINVAL if invalid input params
__rte_experimental int rte_gpu_comm_destroy_list (struct rte_gpu_comm_list * comm_list, uint32_t num_comm_items)¶
Warning
Destroy a communication list.
Parameters
num_comm_items Number of items in the communication list.
Returns
- •
- EINVAL if invalid input params
__rte_experimental int rte_gpu_comm_populate_list_pkts (struct rte_gpu_comm_list * comm_list_item, struct rte_mbuf ** mbufs, uint32_t num_mbufs)¶
Warning
Populate the packets list of the communication item with info from a list of mbufs. Status flag of that packet list is set to READY.
Parameters
mbufs List of mbufs.
num_mbufs Number of mbufs.
Returns
- EINVAL if invalid input params
- ENOTSUP if mbufs are chained (multiple segments)
__rte_experimental int rte_gpu_comm_set_status (struct rte_gpu_comm_list * comm_list_item, enum rte_gpu_comm_list_status status)¶
Warning
Set status flag value of a communication list item.
Parameters
status Status value to set.
Returns
- •
- EINVAL if invalid input params
__rte_experimental int rte_gpu_comm_get_status (struct rte_gpu_comm_list * comm_list_item, enum rte_gpu_comm_list_status * status)¶
Warning
Get status flag value of a communication list item.
Parameters
status Communication list item status flag value. Output parameter.
Returns
- •
- EINVAL if invalid input params
__rte_experimental int rte_gpu_comm_cleanup_list (struct rte_gpu_comm_list * comm_list_item)¶
Warning
Reset a communication list item to the original state. The status flag set to FREE and mbufs are returned to the pool.
Parameters
Returns
- •
- EINVAL if invalid input params
Author¶
Generated automatically by Doxygen for DPDK from the source code.
Fri Dec 15 2023 | Version 23.11.0 |